草庐IT

CountDownLatch和ExecutorService 线程池cachedThreadPool.submit

全部标签

java - 为什么 Thread 类不是最终的?你为什么要扩展一个线程?

我得到这个作为面试问题。whyisn'tThreadclassfinal?WhywouldyouextendaThreadever?我想不出真实世界的用例。 最佳答案 来自Oracle'sdocumentation:Therearetwowaystocreateanewthreadofexecution.OneistodeclareaclasstobeasubclassofThread.ThissubclassshouldoverridetherunmethodofclassThread.Theotherwaytocreateath

java - 如果 ExecutorService 的队列已满会发生什么

我有一个高达TB的大文件,我的任务是逐行处理。每行需要5秒才能完成。为了提高性能,我将进程分派(dispatch)到这样的固定线程池ExecutorServiceexecutor=Executors.newFixedThreadPool(5);while((line=br.readLine())!=null){Runnableworker=newWorkerThread(line);executor.execute(worker);}我的问题是,如果我放置如此多的任务使执行程序的队列不堪重负,会发生什么情况。它会抛出StackOverflow吗? 最佳答案

java - 是否可以通过在 run() 方法中调用 run() 来启动线程?

我知道不应该调用run方法来启动新线程执行,但我指的是thisarticle他们在另一个run方法中调用了runnable.run();,这似乎暗示它启动了一个新线程或者根本没有creating/strong>线程,它只是创建一个新线程并在同一线程中运行所有可运行的线程,即逐个任务?这是文章提到的代码。publicclassThreadPool{privateBlockingQueuetaskQueue=null;privateListthreads=newArrayList();privatebooleanisStopped=false;publicThreadPool(intnoO

java - Spring 的线程

我有一个使用spring、hibernate和struts的Web应用程序(它在Tomcat上运行)调用顺序是这样的……StrutsAction调用spring服务bean,后者又调用SpringDAObean。DAO实现是一个Hibernate实现。问题是我所有的springbean都会在同一个线程中运行吗?我可以在ThreadLocal中存储一些东西并在另一个bean中获取它吗?我很确定这在无状态sessionBean中行不通。EJB容器可以(或将会)为每次调用sessionbean生成一个新线程spring容器会做同样的事情吗?即在同一线程中运行所有bean?当我尝试JUnit测

java - 变量的线程安全设置(Java)?

给定以下代码:publicclassFooBar{publicstaticvolatileConcurrentHashMapmyConfigData=newConcurrentHashMap();}publicclassUpdaterThreadimplementsRunnable{publicvoidrun(){//QuerytheDatafromtheDBandUpdatetheFooBarconfigDataFooBar.myConfigData=ConfigDataDAO.getLatestConfigFromDB();}}线程类将定期更新myConfigData成员变量(每5

Java:ExecutorService 的效率不如手动线程执行?

我有一个多线程应用程序。当使用Thread.start()手动启动线程时,每个并发线程恰好使用25%的CPU(或恰好一个核心-这是在四核机器上)。因此,如果我运行两个线程,CPU使用率正好是50%。然而,当使用ExecutorService运行线程时,似乎有一个“幽灵”线程正在消耗CPU资源!一个线程使用50%而不是25%,两个线程使用75%,等等。这会不会是某种Windows任务管理器的产物?执行者服务代码是ExecutorServiceexecutor=Executors.newFixedThreadPool(threadAmount);for(inti=1;iThread.sta

java - 立即停止线程

我想立即停止正在运行的线程。这是我的代码:A类:publicclassA(){publicvoidmethodA(){For(intn=0;nB类:publicclassB(){publicvoidrunEverything(){Runnablerunnable=newRunnable(){@Overridepublicvoidrun(){try{Thread.sleep(1000);Aa=newA();a.methodA();}catch(InterruptedExceptione){e.printStackTrace();}}};Threadthread=newThread(run

Java - 停止 ExecutorService 中的所有任务

我有一些执行器服务可以安排本地任务,例如读取文件、连接到数据库等。这些进程会进行大量的日志记录,这是基于有很多线程并发运行的事实,这是很广泛的,写他们自己的东西进入日志。现在,在某个时间点可以引发异常,它到达捕获所有异常的main方法。然后我将关闭所有服务并取消每项任务,希望阻止所有进一步的消息进入日志。不幸的是,在我关闭所有内容后,这些消息仍然出现...有什么想法吗?更新:这是一些代码publicclassScheduler{privatefinalExecutorServiceservice;privatefinalConcurrentMap>cache;...publicvoid

java - 为什么一个单线程的java程序有这么多线程?

我有一个有13个线程的java程序,尽管其中只有一个线程的CPU使用率为99%,并且已经运行了大约24小时。其他的CPU使用率为0.0%,显示TIME+的任何位置,从0:00.0到0:12.82,其中一个有3:51.48。该程序旨在成为单线程程序,所以我想知道为什么还有其他线程?他们在做什么,为什么他们显示的CPU使用率和TIME+这么少?更新:我有一个我写的旧java程序(第一个程序-不要评判我!)它是单线程的并且显示相同类型的线程使用......importjava.io.*;classxdriver{staticintN=100;staticdoublepi=3.14159265

java - Java 中有什么方法可以记录*每个*线程中断吗?

每次调用Thread.interrupt()时,我都想以某种方式进行记录,记录哪个线程发出调用(及其当前堆栈)以及识别有关哪个线程被中断的信息。有没有办法做到这一点?搜索资料,看到有人提到实现安全管理器的可能性。这是可以在运行时完成的事情(例如,在Applet或WebStart客户端中),还是您需要使用已安装的JVM来执行此操作?或者有更好的方法吗? 最佳答案 作为一个快速技巧,这比我想象的要容易很多。由于这是一个快速的hack,我没有做一些事情,比如在取消引用数组之前确保堆栈跟踪足够深等。我在我签名的Applet的构造函数中插入了